package cn.tedu.util;

import java.util.*;

//测试 HashMap实现类
public class Test5 {
    public static void main(String[] args) {
        //1,创建HashMap对象
        //      HashMap<key的类型,value的类型> map = new HashMap();
        HashMap<Integer,String> map = new HashMap<>();
        //2,调用方法
        map.put(9527,"唐伯虎");//把一组映射关系的数据存入map
        map.put(9528,"如花");
        map.put(9525,"秋香姐");
        map.put(9520,"石榴姐");
        map.put(9520,"华夫人");
        //特点：数组无序 + key不能相同，相同时value被覆盖
        //{9520=华夫人, 9525=秋香姐, 9527=唐伯虎, 9528=如花}
        System.out.println(map);
        System.out.println( map.containsKey(9520) );//判断是否包含9520的key
        System.out.println( map.containsValue("唐伯虎") );//判断是否包含"唐伯虎"的value
        System.out.println( map.equals("唐伯虎") );//判断是否相等
        //        map.clear();//清空集合
        System.out.println(map.get(9525));//根据key获取value
        System.out.println(map.hashCode());//获取哈希码值
        System.out.println(map.isEmpty());//判断是否为空
        System.out.println(map.size());//获取map的长度
        System.out.println(map.remove(9528));//根据key删除记录
        //迭代Map集合里的数据 {9520=华夫人, 9525=秋香姐, 9527=唐伯虎}
        //方式1(常用）：：Set<K> keySet()--把所有key获取到并存入set
        Set<Integer> keys = map.keySet();//把所有key存入到set里
        for (Integer k: keys) {//迭代set,得到每个key
            //拿着key查对应的vlaue
            String v = map.get(k);
            //判断取到的value和"秋香姐"是否相等
            if( v.equals("秋香姐") ){
                System.out.println(v+",加个微信不喽~");
            }
            System.out.println(k+",,,"+v);
        }
        //方式2(了解)：：Collection<V> values()--只能把map里的所有value取出来
        Collection<String> vs = map.values();//把map里的value们获取到
        for (String v : vs) {//迭代Collection获取每个value
            System.out.println("v = " + v);
        }
        //方式3(常用）：：Set<Map.Entry<K,V>> entrySet()
        //把map里数据的key和value都获取到并封装成Entry存入set中
        Set<Map.Entry<Integer,String>> entrys = map.entrySet();
        //迭代set,获取每个entry
        for(Map.Entry<Integer,String> entry :entrys){
            //再获取entry封装着的key和value
            Integer k = entry.getKey();
            String v = entry.getValue();
            System.out.println(k+v);
        }
        System.out.println();
        //TODO Map的练习: 统计用户输入的字符串中的每个字符出现的次数
        System.out.println("请输入你的内容：");
        String  input=new Scanner(System.in).nextLine();
        //准备map存数据｛a=1，b=2｝
        HashMap<Character,Integer> map2=new HashMap<>();
        for (int i = 0; i <input.length() ; i++) {
            char key=input.charAt(i);//获取每个字符
            //获取以前的value，有值就+1
            Integer value=map2.get(key);
            if(value==null){//没存过就是默值null直接存1
                map2.put(key,1);
            }else{//有值了就直接+1
                map2.put(key,value+1);
            }

        }
        System.out.println(map2);
    }
}